/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package servidor.solicitudes;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Clase del objeto remoto que solicita el cliente
 * @author Eduardo
 */
public class OSolicitudes extends UnicastRemoteObject implements ISolicitudes, Serializable {

    private String servidorSolicitudes = "C:/Users/Eduardo/Documents/SistemasDistribuidos/Practica/"
            + "TallerRMI/src/servidor/solicitudes/";

    public OSolicitudes() throws RemoteException  {
        super();
    }

    /**
     * Método que se encarga de actualizar el archivo de bitácora
     * @param ipCliente Ip del cliente que realiza la transacción
     * @param operacion Operación que intenta realiza el cliente
     * @param resultadoOperacion Resultado de la operación intentada por el cliente
     * @param comentarioOperacion Comentario de la operación realizada por el cliente
     */
    public void escribirEnBitacora(String ipCliente, String operacion, String comentarioOperacion) {
        try {
            DateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
            Date fechaActual = new Date();

            /**
             * El parámetro "true" indica que debe hacerse append al archivo
             */
            FileWriter bitacora = new FileWriter(servidorSolicitudes + "Bitacora.txt", true);
            PrintWriter writer = new PrintWriter(bitacora);

            writer.println(ipCliente + " - " + operacion + " - " + formatoFecha.format(fechaActual)
                    + " - " + comentarioOperacion);

            bitacora.close();
            writer.close();
        } catch (IOException ex) {
            System.out.println("No se encontró el archivo de bitácora en el Servidor de "
                    + "Solicitudes");
        }
    }

    /**
     * Método que permite enlazar al cliente con el método "vista" del Servidor de Archivos
     * @param nombreArchivo Nombre del archivo a visualizar
     * @param ipCliente Ip del cliente que realiza la petición
     * @return Devuelve un mensaje con el resultado de la operación
     * @throws RemoteException Arroja una excepción de conexión con el objeto remoto
     */
    public String vista(String nombreArchivo, String ipCliente) throws RemoteException {
        CSolicitudes peticionVista = new CSolicitudes();

        escribirEnBitacora(ipCliente, "Vista", "Revisar bitácora del Servidor de Archivos para ver"
                + " resultado");

        return peticionVista.getVista(nombreArchivo, ipCliente);
    }

    /**
     * Método que permite enlazar al cliente con el método "actualizacion" del Servidor de Archivos
     * @param fichero Fichero a actualizar en el Servidor de Archivos
     * @param ipCliente Ip del cliente que realiza la petición
     * @return Devuelve un mensaje con el resultado de la operación
     * @throws RemoteException RemoteException Arroja una excepción de conexión con el objeto remoto
     */
    public String actualizacion(File fichero, String ipCliente) throws RemoteException {
        CSolicitudes peticionActualizacion = new CSolicitudes();

        escribirEnBitacora(ipCliente, "Actualizacion", "Revisar bitácora del Servidor de Archivos "
                + "para ver resultado");

        return peticionActualizacion.getActualizacion(fichero, ipCliente);
    }

    /**
     * Método que permite enlazar al cliente con el método "eliminarArchivo" del Servidor de
     * Archivos
     * @param nombreArchivo Nombre del archivo a eliminar
     * @param ipCliente Ip del cliente que realiza la petición
     * @return Devuelve un mensaje con el resultado de la operación
     * @throws RemoteException Arroja una excepción de conexión con el objeto remoto
     */
    public String eliminarArchivo(String nombreArchivo, String ipCliente) throws RemoteException {
        CSolicitudes peticionEliminacion = new CSolicitudes();

        escribirEnBitacora(ipCliente, "Eliminacion", "Revisar bitácora del Servidor de Archivos "
                + "para ver resultado");

        return peticionEliminacion.getEliminacion(nombreArchivo, ipCliente);
    }

    /**
     * Método que permite enlazar al cliente con el método "consultarBitacora" del Servidor de
     * Archivos
     * @return Devuelve un mensaje con el resultado de la operación
     * @throws RemoteException Arroja una excepción de conexión con el objeto remoto
     */
    public String consultarBitacora() throws RemoteException {
        CSolicitudes peticionBitacora = new CSolicitudes();

        return peticionBitacora.getBitacora();
    }
}
